#include<bits/stdc++.h>
#define sd(n) scanf("%d",&n) 
#define sld(n) scanf("%lld",&n)
#define pd(n) printf("%d", (n))
#define pld(n) printf("%lld", n)
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define fi first
#define se second
const int N=2e5;
#define INF 0x7fffffff
typedef long long int ll;
using namespace std;
//----------------------------------------------------------------------------//
// int pos3=pos2-a;
// cout<<"the first lower 3 num is:"<<*pos2<<"----"<<"it pos is:"<<pos3<<'\n';
void solve()
{
	int n = 5;
	int a[] = { 5,4,3,2,1 };//这里可以理解成仿函数是greater<int>
	int* pos2 = upper_bound(a, a + n, 3, greater<int>());//降序传greater<int>()可以找到第一个小于3的元素
	int pos3 = pos2 - a;
	cout << "the first lower 3 num is:" << *pos2 << "----"<< "it pos is:" << pos3 << '\n';

	sort(a, a + n);//a={1,2,3,4,5};
	int*pos = lower_bound(a, a + n, 3,less<int>());//查找第一个大于等于3的下标(可以等于),应为是数组不是set所以默认的lower都是less,但是如果是降序就要手动传一个greater从而达到反向用的目的
	int*pos4= upper_bound(a, a + n, 3,less<int>());//第一个大于3的数字,默认仿函数是less
	int pos5=pos-a;
	cout << "the first upper 3 num is:" << *pos4 << "----"<< "it pos is:" << pos5 << '\n';
	puts("");

}


int main()
{
	//int T=1;
	////sd(T);
	//while (T--)
	//{
	//	solve();
	//}


	vector<int> v1(4, -1);
	return 0;
}